home *** CD-ROM | disk | FTP | other *** search
/ IRIS Performer 2.2 Friends Demo / SGI IRIS Performer 2.2 Friends Demo.iso / friends / devices / BGSystems / CerealBox / d_test.c < prev    next >
C/C++ Source or Header  |  1997-10-31  |  4KB  |  208 lines

  1. /*
  2.  * d_test.c
  3.  *
  4.  * Main routine for v3.0 test for LV816-D
  5.  * Note, this is to verify that the libraries still work.
  6.  *
  7.  * Copyright 1995 BG Systems 
  8.  *
  9.  * Author       Date        Comments
  10.  * John Green   15-Jan-95   Written
  11.  * John Green   01-Feb-95   Final tuning for rev 3.0
  12.  *
  13.  *
  14.  */
  15.  
  16. static char SccsId[] = "@(#)d_test.c    1.1  08 Feb 1995";
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <time.h>
  21. #include <signal.h>
  22.  
  23. #include <sys/schedctl.h>
  24. #include <sys/types.h>
  25. #include <sys/time.h>
  26.  
  27. #include "lv3.h"
  28.  
  29. void setup_lv(void );
  30. void init_timer(void );
  31. void rf_quit(void );
  32. void catcher(void );
  33. int ms_time(double *);
  34.  
  35. extern int open_lv(bglv *, char *, int );
  36. extern int init_lv(bglv *);
  37. extern int close_lv(bglv *);
  38.  
  39. extern int w_lv(int, char *);
  40. extern int r_lv(bglv *);
  41.  
  42. extern int check_rev(bglv *);
  43. extern int check_setup(bglv *);
  44.  
  45. bglv bgdata;
  46.  
  47. double start, now;
  48. struct itimerval itv;
  49.  
  50. /*
  51.  * main()
  52.  *
  53.  * This is where everything happens
  54.  *
  55.  */
  56.  
  57. main()
  58. {
  59.    int      st;
  60.    long     counter = 0;
  61.    int      i;
  62.    int      j;
  63.    char     inputs = 1;
  64.  
  65.  
  66.    setup_lv();
  67. #ifndef DEBUG
  68.    init_timer();
  69. #endif
  70.  
  71.    st = ms_time(&start);
  72.  
  73.    i = 0;
  74.    while(counter++ < 10000000)
  75.    {
  76.       st = w_lv(bgdata.sp_fd, "o");
  77.  
  78.       st = ms_time(&now);
  79. #ifdef DEBUG
  80.       sginap(3);
  81. #else
  82.       sigpause(SIGALRM);
  83. #endif
  84.  
  85.       st = r_lv(&bgdata);
  86.                   
  87.       if ( inputs && counter % 15 == 0)
  88.       {  
  89.          for ( j = 0; j < 8; j++ )
  90.          {
  91.             if ( bgdata.analog_in & 0x1 << j )
  92.                printf("%4.2f  ", bgdata.ain[j]); 
  93.          }
  94.  
  95.          for ( j = 0; j <=2; j++ )
  96.          {
  97.             if ( bgdata.dig_in & 0x10 << j )
  98.             {
  99.                for ( i = 0; i < 8; i++ )
  100.                {
  101.                   if ( (bgdata.din[j]>>i) & 0x1 )
  102.                      printf("1");
  103.                   else
  104.                      printf("0");
  105.                }
  106.                printf("  ");
  107.             }
  108.          }
  109.  
  110.          printf("\n");
  111.       }
  112.       if ( (counter % 200) == 0 )
  113.          printf("%7ld  Update rate = %5.2f Hz\n",
  114.                   counter, counter/(now-start) );
  115.    }
  116.  
  117.    printf("%ld transfers in %f sec.\n", counter, (now-start) );
  118.    printf("Update rate = %5.2f Hz\n", counter/(now-start) );
  119.  
  120.    exit(0);
  121. }
  122.  
  123.  
  124. void setup_lv()
  125. {
  126.    int st;
  127.    int i;
  128.    
  129. /*
  130.  * Defaults to 4 analog, and 16 discretes
  131.  */
  132.  
  133.    bgdata.analog_in = 0;
  134.    bgdata.analog_in = AIC1 | AIC2 | AIC4 | AIC8;
  135.  
  136.    bgdata.dig_in = 0;
  137.    bgdata.dig_in = DIC1 | DIC2;
  138.  
  139. /*
  140.  *  Set the baud rate
  141.  */
  142.    bgdata.baud    = BAUD192;
  143.  
  144. /*
  145.  *  Open the port & drivers
  146.  */
  147.    st = open_lv(&bgdata, "/dev/ttyd2", FB_NOBLOCK);
  148.    if (st < 0)
  149.    {
  150.       printf("Unable to open port\n");
  151.       exit(-1);
  152.    }
  153.  
  154.  
  155. /*
  156.  *  Send the init string
  157.  */
  158.    st = init_lv(&bgdata);
  159.    if ( st < 0 )
  160.    {
  161.       check_setup(&bgdata);
  162.       printf("Invalid setup requested.  Bye\n");
  163.       exit(-1);
  164.    }
  165. }
  166.  
  167. void catcher()
  168. {
  169. }
  170.  
  171. int ms_time(double *t)
  172. {
  173.    struct timeval tp;
  174.    struct timezone tzp;
  175.    int st;
  176.  
  177.    st = gettimeofday(&tp, &tzp);
  178.    *t = tp.tv_sec +  ((float)tp.tv_usec / 1000000.0);
  179.  
  180.    return(0);
  181. }
  182.  
  183. void rf_quit()
  184. {
  185.    int st;
  186.  
  187.    st = close_lv(&bgdata);
  188.    printf("Bye\n");
  189.    exit(0);
  190. }
  191.  
  192.  
  193. void init_timer()
  194. {
  195. /*
  196.  * Initialize the itimer
  197.  */
  198.    itv.it_interval.tv_sec = 0;
  199.    itv.it_interval.tv_usec = 20000;
  200.    itv.it_value = itv.it_interval;
  201.    setitimer(ITIMER_REAL, &itv, (struct itimerval *)0 );
  202.  
  203.    sigset(SIGALRM,  catcher);
  204.    sigset(SIGQUIT,  rf_quit);
  205.    sigset(SIGKILL,  rf_quit);
  206.    sigset(SIGINT,   rf_quit);
  207. }
  208.